#include "dieselgenerator.h"
#include <QString>
#include <stdexcept> // 用于异常处理

// 构造函数实现
DieselGenerator::DieselGenerator(const QString& name,
                                 double maxP,
                                 double minP,
                                 double cost)
    : Component(name,0.85),          // 调用基类构造函数
    maxPower(maxP),
    minPower(minP),
    fuelCost(cost),
    currentEfficiency(0.85)   // 默认效率值
{
    // 验证参数有效性
    if (minPower < 0) {
        minPower = 0;
    }

    if (maxPower < minPower) {
        maxPower = minPower;
    }

    if (fuelCost < 0) {
        fuelCost = 0;
    }

    // 初始化排放率曲线（示例数据）
    emissionRates = {0.8, 0.7, 0.6, 0.55, 0.5}; // 随负载增加排放率降低
}

// 析构函数实现
DieselGenerator::~DieselGenerator()
{
    // 清理柴油发电机特有的资源（如果有）
}

// 计算运行成本
double DieselGenerator::calculateCost() const
{
    return getPower() * fuelCost;
}

// 设置燃料成本
void DieselGenerator::setFuelCost(double cost)
{
    if (cost >= 0) {
        fuelCost = cost;
    }
}

// 获取燃料成本
double DieselGenerator::getFuelCost() const
{
    return fuelCost;
}

// 设置功率范围
void DieselGenerator::setPowerRange(double minP, double maxP)
{
    if (minP >= 0 && maxP >= minP) {
        minPower = minP;
        maxPower = maxP;

        // 如果当前功率不在新范围内，调整它
        if (getPower() < minPower) {
            setPower(minPower);
        } else if (getPower() > maxPower) {
            setPower(maxPower);
        }
    }
}

// 获取最大功率
double DieselGenerator::getMaxPower() const
{
    return maxPower;
}

// 获取最小功率
double DieselGenerator::getMinPower() const
{
    return minPower;
}

// 重写基类的设置功率方法，添加功率范围检查
void DieselGenerator::setPower(double newPower)
{
    // 确保功率在允许范围内
    if (newPower < minPower) {
        newPower = minPower;
    } else if (newPower > maxPower) {
        newPower = maxPower;
    }

    // 调用基类的setPower方法
    Component::setPower(newPower);

    // 更新效率（简化模型：效率随负载增加而提高）
    if (maxPower > 0) {
        double loadRatio = newPower / maxPower;
        if (loadRatio < 0.3) {
            currentEfficiency = 0.7;
        } else if (loadRatio < 0.7) {
            currentEfficiency = 0.8;
        } else {
            currentEfficiency = 0.85;
        }
    }
}

// 重写基类的获取状态方法，添加柴油发电机特定信息
QString DieselGenerator::getStatus() const
{
    return QString("%1\n最大功率: %2 kW\n最小功率: %3 kW\n燃料成本: %4 元/kWh\n效率: %5")
        .arg(Component::getStatus())  // 先获取基类状态信息
        .arg(maxPower)
        .arg(minPower)
        .arg(fuelCost)
        .arg(currentEfficiency);
}

// 启动逻辑：使用基类setActive()
void DieselGenerator::start()
{
    setActive(true);
    setPower(minPower); // 启动后默认最小功率
}

// 停止逻辑：使用基类setActive()
void DieselGenerator::stop()
{
    setPower(0);
    setActive(false);
}
// 柴油发电机特有方法：设置排放率曲线
void DieselGenerator::setEmissionRates(const QVector<double>& rates)
{
    emissionRates = rates;
}
